#include <cassert>
#include <iostream>
#include <sstream>
using namespace std;

bool is_normal(char c){
  // 正规说法是“非保留字符（unreserved）”，但否定意义的命名干扰理解。
  // 本题不考察性能。如对速度有要求，可考虑换成bool flag[256]形式的查找表。
  static const string normal_chars{"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~"};
  return normal_chars.find_first_of(c) != string::npos;
}

unsigned char parse_hex(char h){
  if(h <= '9'){
    return h - '0';
  }else if(h <= 'F'){
    return h - 'A' + 10;
  }else{
    return h - 'a' + 10;
  }
}

unsigned char parse_byte(unsigned char hi, unsigned char lo){
  return (parse_hex(hi) << 4) | parse_hex(lo);
}

bool url_decode(const string& src, string& raw){
  // 对raw内容不做清理。
  // 返回true时raw的内容可用，否则不可用。
  // TODO: 实现URL解码功能。
  return false;
}

int main(){
  for(string esc; getline(cin, esc);){
    string raw;
    if(url_decode(esc, raw)){
      for(int j = 0, z = raw.size(); j < z; ++j){
        if(j > 0){
          cout << ' ';
        }
        cout << (int)(unsigned char)raw[j]; // 注意这里的转型。
      }
      cout << endl;
    }else{
      cout << "invalid" << endl;
    }
  }
  return 0;
}
/* URL解码（url_decode） */